package web.offreproduit;
import java.util.Date;
import java.util.List;

import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import persistence.offre.OffreDeProduit;
import persistence.produitcatalogue.ProduitCatalogue;
import persistence.util.HibernateUtil;
import persistence.utilisateur.Fournisseur;
import web.Template;
import web.validation.ValidationOffre;

public class ListeOffresGestionnaire extends Template {

	private Query query;
	private List listOffresQuery;
	ListView<OffreDeProduit> listeProduit;
	private Form<?> validationOffre;
	private static final String VALEUR_TITRE = "Liste des offres non validées";
	private Fournisseur currentFournisseur;
	
	public ListeOffresGestionnaire()
	{
		super();
		// Récupération des Offres de Produits non validée !
		SessionFactory sf = HibernateUtil.getSessionFactory();
		Session session = sf.openSession();
		query = session.createQuery("Select o from OffreDeProduit o where validation=:code");
		int validation = 0;
		query.setParameter("code", validation);
		listOffresQuery = query.list();
		session.close();
		
		listeProduit = new ListView<OffreDeProduit>("listeoffres", listOffresQuery)
		{
			
			public void populateItem(ListItem item)
			{
				final OffreDeProduit currentOffre = (OffreDeProduit) item.getModelObject();
				
				// Récupération du nom du fournisseur de l'offre
				SessionFactory sf = HibernateUtil.getSessionFactory();
				Session session = sf.openSession();
				
				query = session.createQuery("Select f from Fournisseur f where id= :code");
				int idFourni = currentOffre.getFournisseur().getId();
				query.setParameter("code", idFourni);
				currentFournisseur = (Fournisseur) query.uniqueResult();
				
				if(currentFournisseur != null){
				item.add(new Label("fournisseur", "Société "+currentFournisseur.getSociete()));
				}
				else {
					item.add(new Label("fournisseur", "Fournisseur inconnu"));
				}
				item.add(new Label("libelle", currentOffre.getLibelle()));
				item.add(new Label("prix", currentOffre.getPrix()));
				item.add(new Label("qte", currentOffre.getQte()));
				item.add(new Label("date", currentOffre.getDate().toString()));
				item.add(new Label("RAM", currentOffre.getRAM()));
				item.add(new Label("poids", currentOffre.getPoids()));
				// AFFICHAGE VALIDATION
				item.add(new Label("validation", "Offre non validée et non accessible par les clients."));
				// AFFICHAGE DES CONFIGURATIONS
				item.add(new Label("accessoire", currentOffre.getAccessoire().getLibelle()));
				item.add(new Label("couleur", currentOffre.getCouleur().getLibelle()));
				item.add(new Label("marque", currentOffre.getMarque().getLibelle()));
				item.add(new Label("stockage", currentOffre.getStockage().getLibelle()));
				item.add(new Label("systemeExploitation", currentOffre.getSystemeExploitation().getLibelle()));
				item.add(new Label("taille", currentOffre.getTaille().getLibelle()));
				
				// AFFICHAGE FORMULAIRE VALIDATION OFFRE
				validationOffre = new Form<Object>("validationoffre"){
					public void onSubmit()
					{
						SessionFactory sf = HibernateUtil.getSessionFactory();
						Session session = sf.openSession();

						currentOffre.setValidation(1);
						
						Transaction t = session.beginTransaction();
						session.update(currentOffre);
						t.commit();
						// On créé un nouveau produit qui sera issu de l'offre
						ProduitCatalogue p = new ProduitCatalogue();
						
						p.setLibelle(currentOffre.getLibelle());
						p.setPrix(currentOffre.getPrix());
						p.setStockProduit(currentOffre.getQte());
						p.setDateMiseEnLigne(new Date());
						p.setPoids(currentOffre.getPoids());
						p.setRAM(currentOffre.getRAM());
						p.setAccessoire(currentOffre.getAccessoire());
						p.setCouleur(currentOffre.getCouleur());
						p.setMarque(currentOffre.getMarque());
						p.setStockage(currentOffre.getStockage());
						p.setSystemeExploitation(currentOffre.getSystemeExploitation());
						p.setTaille(currentOffre.getTaille());
						
						session.close();
						setResponsePage(new ValidationOffre(p));
					}
				};
				item.add(validationOffre);
			}
		};
		listeProduit.setReuseItems(true);
		add(new Label("labeltitre", VALEUR_TITRE));
		add(listeProduit);
	}
}